A = [0] * 3
print(A)
# [0, 0, 0]

for i in range(3):
    A[i] = [0] * 3

print(A)
# [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

B = [[0] * 3] * 3
print(B)
# [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

A[1][1] = 2
print(A)
# [[0, 0, 0], [0, 2, 0], [0, 0, 0]]
B[1][1] = 2
print(B)
# [[0, 2, 0], [0, 2, 0], [0, 2, 0]]

# 为什么改了一个元素全都改了呢？
# 对于一个不可变的对象 比如字符串
x = "bjz"
y = "bjz"
print(x is y)  # True

# 但是列表不一样的 是可以改变 每一个列表拥有一个自己的地址
x = [1, 2, 3]
y = [1, 2, 3]
print(x is y)  # False

# 上边 B = [[0] * 3] * 3 实际上使用了[0] 这个对象三次
# 可以这样
print(B[0] is B[1])  # True
print(B[1] is B[2])  # True
print(B[0] is B[2])  # True
# 事实证明是一个对象
print(A[0] is A[2])  # False

